Lanskap optimasi CUDA modern merepresentasikan pergeseran paradigma dari eksekusi stream tradisional yang terhambat oleh CPU hingga sebuah ekosistem otonom yang dipercepat oleh perangkat keras. Transisi ini meminimalkan beban di sisi host dengan memindahkan alokasi memori, sinkronisasi, dan pengiriman kernel langsung ke perangkat keras GPU.
1. Evolusi Antarmuka Perangkat Lunak-Perangkat Keras
Optimasi dimulai dari driver. Aplikasi modern menggunakan cuInit dan cuModuleLoad untuk mengelola modul. Fitur utama adalah Pemuatan Lambat (CUDA_MODULE_LOADING=LAZY), di mana fungsi hanya dimuat ke konteks GPU saat dipanggil pertama kali, secara drastis mengurangi ukuran memori dan latensi awal.
2. Kompatibilitas Binari & JIT
Kinerja dijaga tetap melalui generasi dengan menggunakan PTX (Eksekusi Thread Paralel) dan cubin. Compiler JIT memastikan bahwa PTX tingkat tinggi dioptimalkan untuk Set Fitur Khusus Arsitektur target GPU saat runtime. Mengompilasi terhadap CUDA 11.3, misalnya, memungkinkan eksekusi pada driver 11.4 tanpa kompilasi ulang karena kompatibilitas ABI.
3. Batas Sumber Daya dan Eksekusi
Eksekusi modern diatur oleh pemetaan sumber daya yang ketat antara Buffer Parameter (PB) dan Blok Thread (TB). Ini dinyatakan secara matematis sebagai:
$$PB = \{BP_0, BP_1, \dots, BP_L\}, \quad TB = \{BT_0, BT_1, \dots, BT_L\}$$
Di mana validasi batasan perangkat keras memastikan bahwa $$BT_n \le BP_m$$ untuk $$n \le m$$. Kerangka kerja ini memungkinkan peluncuran otonom melalui cudaLaunchDevice sambil tetap berada dalam batas perangkat keras.
4. Primitif Manajemen Proaktif
Optimasi kini membutuhkan visibilitas global atas data yang dikelola. Primitif seperti cudaMemPrefetchAsync dan Penugasan Sistem memungkinkan GPU menyiapkan data sebelum masuk kernel, menghilangkan hambatan sinkron pada platform heterogen yang memiliki CPU Arm dan GPU NVIDIA.